package com.linln.common.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;

/**
 * @author : pengliang
 * @version V1.0
 * @Project: timo
 * @Package com.linln.common.utils
 * @Descriptio /**
 * @Project: timo
 * @Package com.linln.common.utils
 * @Description: 生成二维码
 * @date Date : 2020年11月20日 9:54
 */
public class QRCodeUtil {

    /**
     * 生成二维码为字节数组
     *
     * @param text   扫描二维码显示的文字 或 url
     * @param width  二维码的宽度
     * @param height 二维码的高度
     * @return 字节数组
     * @throws WriterException
     * @throws IOException
     */
    public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
        byte[] pngData = pngOutputStream.toByteArray();
        return pngData;
    }


    private static final String QR_CODE_IMAGE_PATH = "C:/Users/25826/Desktop/MyQRCode.png";

    /**
     * 生成二维码保存在磁盘中
     *
     * @param text   二维码文本
     * @param width  二维码宽度
     * @param height 二维码高度
     * @return 字节数组
     * @throws WriterException
     * @throws IOException
     */
    public static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();

        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        Path path = FileSystems.getDefault().getPath(filePath);

        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }
}
